package com.springCloud.eureka;

/**
 * Eureka抓取注册表、多级缓存
 * 1、多级缓存的初始化
 * 2、多级缓存的运作流程
 * 3、全量更新
 * 4、增量更新
 */
public class EurekaDemo {

    /**
     * EurekaClient拉取注册表
     * DiscoveryClient 初始化的时候会去拉取一次注册表
     * 调用jersey发送http请求，
     * 获取请求，缓存到本地
     *
     */
    public void demo1(){

    }

    /**
     * EurekaServer返回注册表
     * Jersey filter拦截请求，把请求转交给全量拉取注册表的方法
     * 判断是否可以拉取注册表
     * 判断是否gzip压缩请求
     * 然后从只读缓存中获取注册表，返回
     *
     */
    public void demo2(){

    }

    /**
     * 注册列表的初始化
     * EurekaServer初始化的时候
     * 感知集群列表，处理集群节点相关信息
     * 从相邻的节点拷贝注册表
     * 更新集群列表
     *
     * 基于ConcurrentHashMap构建一级只读缓存
     * 基于Guava的LoadingCache构建二级读写缓存，二级缓存会在180s后过期
     * 一级缓存和二级缓存之间有一个定时任务，会每隔30s去对比他们的数据，如果不一样，用二级读写缓存，更新一级只读缓存
     * 如果服务注册，下线，剔除，会手动清除二级缓存。
     */
    public void demo3(){

    }

    /**
     * 增量获取注册表
     * 每个30s发送获取注册表请求
     * EurekaSever中会有一个队列，维护最近3分钟变更的注册表
     * 获取到这个注册表的变更数据
     * 然后对应的更新本地注册表
     * 返回的时候会带有一个全量主表的hash key，更新后把本地注册表也进行一个hash 得到的key进行对比。如果发现不一致，则进行全量更新。
     */
    public void demo4(){

    }
}
